/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package src.model;
import src.dto.TarefaDTO;
import src.dto.PrioridadeDTO;
import src.dto.SolicitanteDTO;
import java.util.ArrayList;
import java.util.Collection;
import java.sql.*;


/**
 *
 * @author camila
 */
public class tarefaDAO {

    //Declaração de variáveis
    private static Conexao conexao = null;
    private static Statement stmt = null;

    Collection<TarefaDTO> tarefas = new ArrayList<TarefaDTO>();
    TarefaDTO tar;
    SolicitanteDTO sol;
    PrioridadeDTO prio;
    private String sql;

    //Método construtor do UsuárioDAO.
    public tarefaDAO(){
        conexao = Conexao.getConexao();
    }

    public boolean cadastrarTarefa(TarefaDTO tarefa){
        sql = "INSERT INTO Tarefa (nome_tarefa, descricao, data_solicitacao, id_solicitante, ";
        sql += "id_prioridade, id_status, id_usuario) VALUES ('" + tarefa.getNome_tarefa() + "','" + tarefa.getDescricao();
        sql +=  "','" + tarefa.getData_solicitacao() + "'," + tarefa.getSolicitante().getId_solicitante() + "," + tarefa.getPrioridade().getIdPrio();
        sql +=  "," + tarefa.getStatus().getIdStatus() + "," + tarefa.getUsuario().getId_usuario() + ")";

        //Executa SQL
        return modificar(sql);
    }

    public Collection<TarefaDTO> listar(int id_usuario){
        sql = "SELECT tarefa.id_tarefa, tarefa.nome_tarefa, tarefa.data_solicitacao, solicitante.nome, ";
        sql += "prioridade.id_prioridade, prioridade.descricao_prioridade FROM tarefa, solicitante, prioridade WHERE ";
        sql += "tarefa.id_solicitante = solicitante.id_solicitante AND tarefa.id_prioridade = prioridade.id_prioridade ";
        sql += "AND tarefa.id_usuario = " + id_usuario;
                //Executa SQL
        try{
            this.stmt = this.conexao.con.createStatement();
            ResultSet rs = this.stmt.executeQuery(sql);
            while (rs.next()){
                tar = new TarefaDTO();
                tar.setId_tarefa(rs.getInt("id_tarefa"));
                tar.setNome_tarefa(rs.getString("nome_tarefa"));
                tar.setData_solicitacao(rs.getString("data_solicitacao"));//Possibilidade de errp"

                sol = new SolicitanteDTO();
                sol.setNome(rs.getString("nome"));

                prio = new PrioridadeDTO();
                prio.setDescricaoPrioridade(rs.getString("descricao_prioridade"));

                tar.setSolicitante(sol);
                tar.setPrioridade(prio);

                tarefas.add(tar);
            }
        }catch(SQLException se){
            printSQLException(se);
        }
        return tarefas;
    }

    //Método para inserir, excluir e atualizar.
    private boolean modificar(String sql){
        try{
            PreparedStatement stmt = this.conexao.con.prepareStatement(sql);
            stmt.executeUpdate();
            return true;
        }catch(SQLException se){
            printSQLException(se);
            return false;
        }
    }

    //Método que imprimi a exceção do SQL
    private static void printSQLException(SQLException se){
        while(se != null){
            System.out.print("SQLException: State: " + se.getSQLState());
            System.out.print("Severety: " + se.getErrorCode());
            System.out.print(se.getMessage());
            se = se.getNextException();
        }
    }
}
